<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <h4>alert拼成aaalert的报错信息：</h4>
    <p id="result" style="color: red;"></p>
    <p> <b>注意</b>：无论是否引发异常，都将执行finally子句。 另外，如果抛出异常，即使没有catch子句处理该异常，finally子句中的语句也会执行。</p>
    <p id="result2" style="color: red;"></p>
    <h4>下面是RangeError抛出异常:</h4>
    <p id="result3" style="color: red;"></p>
    <h4>访问未定义的变量将引发ReferenceError:</h4>
    <p id="result4" style="color: red;"></p>
    <h4>如果您的JavaScript代码中有任何语法问题，则会在运行时引发SyntaxError:</h4>
    <p id="result5" style="color: red;"></p>
    <h4>当值不是期望的类型时，抛出TypeError(类型错误):</h4>
    <p id="result6" style="color: red;"></p>
    <h4>当您指定无效的URI（统一资源标识符）时，将引发URIError:</h4>
    <p id="result7" style="color: red"></p>
    <script>
        //和java很像  这里我们故意拼错alert
        try {
            aaalert("Hello world");
        } catch (e) {
            document.getElementById("result").innerHTML = e.name + "<br>" + e.message;
        }
        //接下来是throw语句
        //自定义错误 异常可以是字符串，数字，布尔值
        function triangle() {
            var a = document.getElementById("inp_a").value;
            var b = document.getElementById("inp_b").value;
            var c = document.getElementById("inp_c").value;
            try {
                isTriangle(a, b, c);
            } catch (err) {
                document.getElementById('para').innerHTML = err;
            }

        }

        function isTriangle(a, b, c) {
            if (isNaN(a) || isNaN(b) || isNaN(c)) {
                throw "参数不是数字！";
            } else if (a <= 0 || b <= 0 || c <= 0) {
                throw "长度不能小于等于0！";
            } else if (Number(a) + Number(b) <= Number(c) || Number(a) + Number(c) <= Number(b) || Number(c) + Number(b) <= Number(a)) {
                throw "无法构成三角形";
            } else {
                document.getElementById('para').innerHTML = "可以构成三角形";
            }
        }

        //finally语句  最终语句 可以在try和之后执行代码，而catch不管结果如何
        try {
            aaalert("Hello world");
        } catch (err) {
            document.getElementById("result2").innerHTML = err;
        } finally {
            document.getElementById("result2").innerHTML += "<h3>执行Finally语句</h3>";
        }
        //EvalError 表示有关全局函数eval()的错误
        //InternalError 表示在JavaScript引擎中引发内部错误时发生的错误
        //RangeError表示当数字变量或参数超出其有效范围时发生的错误
        try {
            var arr = new Array(-1); //抛出范围错误
        } catch (err) {
            document.getElementById("result3").innerHTML = err.name + "<br>" + err.message;
        }
        //访问未定义的变量将引发ReferenceError:
        try {
            var x = 5 + y;
        } catch (err) {
            document.getElementById("result4").innerHTML = err.name + "<br>" + err.message;
        }
        //如果您的JavaScript代码中有任何语法问题，则会在运行时引发SyntaxError。
        try {
            eval("alert('Hello)"); // 缺少'会引发错误
        } catch (err) {
            document.getElementById("result5").innerHTML = err.name + "<br>" + err.message;
        }
        //当值不是期望的类型时，抛出TypeError。
        var num = 50;
        try {
            num.toUpperCase(); // 不能将数字转换为大写
        } catch (err) {
            document.getElementById("result6").innerHTML = err.name + "<br>" + err.message;
        }
        //当您指定无效的URI（统一资源标识符）时，将引发URIError。
        try {
            decodeURI("%"); // 无效的URL
        } catch (err) {
            document.getElementById("result7").innerHTML = err.name + "<br>" + err.message;
        }
    </script>
    <input id="inp_a"><br>
    <input id="inp_b"><br>
    <input id="inp_c">
    <button onclick="triangle()">点我验证是否为三角形</button>
    <h3 id="para" style="color: red;"></h3>
</body>

</html>